package com.wrial.kind.design;
/*
 * @Author  Wrial
 * @Date Created in 15:12 2020/8/13
 * @Description 该函数会根据需要丢弃无用的开头空格字符，直到寻找到第一个非空格的字符为止。
 * 该字符串除了有效的整数部分之后也可能会存在多余的字符，这些字符可以被忽略，它们对于函数不应该造成影响。
 */

public class StrToInt {

    /**
     * @param str
     * @return
     */
    public int strToInt(String str) {
        int bound = Integer.MAX_VALUE / 10;   //除10后是"214748364"
        String aimStr = str.trim();
        if (aimStr.length()==0) return 0;
        int flag = 1;
        int startIndex = 0;
        int ans = 0;
        char c = aimStr.charAt(0);
        if (c == '-') {
            flag = -1;
            startIndex++;
        } else if (c == '+') {
            flag = 1;
            startIndex++;
        }

        for (int i = startIndex; i < aimStr.length(); i++) {
            if (aimStr.charAt(i) < '0' || aimStr.charAt(i) > '9') break;
            //先进行预检
            if (ans > bound || (ans == bound && aimStr.charAt(i) > '7')) {
                return flag == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }
            ans = ans * 10 + aimStr.charAt(i) - '0';
        }
        return ans * flag;
    }
}
